拍謝因為我是抱著每天在 iT 邦幫忙更新當日學的東東的心態,幾乎沒有排程,到現在才發現漏掉了 TapPay Backend...不過相信我,絕對比你看過任何的 API 都還要簡單。
複習一下,整個付款流程會是:
TapPay 後端有兩種取得付款結果的方法,一種是 Prime,一種是 Card Token,後者是給有綁定資訊,或是定期扣款使用的。
可以到這裡(iFrame),或是到官方 Github 找到其他你想串接的方式的 DEMO(其實取得的資訊都一樣)。
輸入測試卡號 4242 4242 4242 4242 04/42(大於今天的日期)
在下面會出現這串
Use following command to send to server
curl -X POST https://sandbox.tappaysdk.com/tpc/payment/pay-by-prime \
-H 'content-type: application/json' \
-H 'x-api-key: partner_6ID1DoDlaPrfHw6HBZsULfTYtDmWs0q0ZZGKMBpp4YICWBxgK97eK3RM' \
-d '{
"partner_key": "partner_6ID1DoDlaPrfHw6HBZsULfTYtDmWs0q0ZZGKMBpp4YICWBxgK97eK3RM",
"prime": "ceb908f0765cb4173c88f48766773832c21e3a31a05aea08400d0bc2c4410914",
"amount": "1",
"merchant_id": "GlobalTesting_CTBC",
"details": "Some item",
"cardholder": {
"phone_number": "+886923456789",
"name": "王小明",
"email": "LittleMing@Wang.com",
"zip_code": "100",
"address": "台北市天龍區芝麻街1號1樓",
"national_id": "A123456789"
}
}'
拿剛剛的那串到 Python,TapPay 有個 Python 的模組:
Github 說明:https://github.com/shihweilo/tappay-python
PyPI:https://pypi.org/project/tappay/
記得使用前要在終端機 pip install tappay
import tappay
# 初始化 tappay 客戶端
client = tappay.Client(True, 'partner_6ID1DoDlaPrfHw6HBZsULfTYtDmWs0q0ZZGKMBpp4YICWBxgK97eK3RM', 'GlobalTesting_CTBC')
# 卡片持有者的資訊(都可以帶空字串給伺服器)
phone = "+886923456789"
name = "王小明"
email = "LittleMing@Wang.com"
card_holder_data = tappay.Models.CardHolderData(phone, name, email)
# 支付資訊
prime_token = "ceb908f0765cb4173c88f48766773832c21e3a31a05aea08400d0bc2c4410914" # 放上剛剛取得那串資料中的 "prime"
amount = 1
payment_details = "Some item"
# 執行支付操作
response_data_dict = client.pay_by_prime(prime_token, amount, payment_details, card_holder_data)
# 輸出結果
print(response_data_dict)
如果成功的話會顯示下面的資訊
>>> # 執行支付操作
>>>
>>> response_data_dict = client.pay_by_prime(prime_token, amount, payment_details, card_holder_data)
>>> # 輸出結果
>>>
>>> print(response_data_dict)
{'status': 0, 'msg': 'Success', 'amount': 1, 'acquirer': 'TW_CTBC', 'currency': 'TWD', 'rec_trade_id': 'D20231006wsnpIu', 'bank_transaction_id': 'TP20231006wsnpIu', 'order_number': '', 'auth_code': '195191', 'card_info': {'issuer': '', 'funding': 0, 'type': 1, 'level': '', 'country': 'UNITED KINGDOM', 'last_four': '4242', 'bin_code': '424242', 'issuer_zh_tw': '', 'bank_id': '', 'country_code': 'GB'}, 'transaction_time_millis': 1696604484430, 'bank_transaction_time': {'start_time_millis': '1696604484475', 'end_time_millis': '1696604484475'}, 'bank_result_code': '', 'bank_result_msg': '', 'card_identifier': 'f4b1d627cbf4472aadba5ef94927eb14', 'merchant_id': 'GlobalTesting_CTBC', 'is_rba_verified': False, 'transaction_method_details': {'transaction_method_reference': 'REQUEST', 'transaction_method': 'FRICTIONLESS'}}
Prime 放太久會臭掉變這樣
>>> # 輸出結果
>>>
>>> print(response_data_dict)
{'status': 91, 'msg': 'Expired prime'}
用兩次會是這樣
>>> print(response_data_dict)
{'status': 121, 'msg': 'Invalid arguments : prime'}
FIN